/*************************************************************************
	> File Name:    ssicloud_api_common.h
	> Author:       陈猛
	> Mail:         chen-meng@example.com
	> Created Time: Sun 22 Mar 2020 02:03:40 PM CST
	> Description:  用来定义每个api下载下来后，分析出来的数据结构
 ************************************************************************/
#ifndef SSICLOUD_API_COMMON_H
#define SSICLOUD_API_COMMON_H

#include "common_func/common_func.h"
#include "net_util/net_common.h"
#include <util/list_table.h>
#include <util/sf_string.h>

// ---
#define VIN_STRING  ssicloud::Object::g_vidString // "LGGG3DV20LL712313"
// 测试环境使用
////#define LQ_BASE_URL "https://icvtest.ssicloud.cn:4443/lq"
//#define LQ_BASE_URL "http://27.17.52.252:7600/lq"
//#define TOKEN_STRING    "0860104d-31e6-4590-a72c-d9aeae988c2e"

// 生产环境实际使用
#define LQ_BASE_URL  "http://icvservice.dflzm.com:7600/lq"
#define TOKEN_STRING "04efd8bc-453b-4ffc-8f91-cdb7e9d1bd83"


#define HEADER_TOKEN  ssicloud::Object::g_tokenString
#define HEADER_JSON   "Content-Type: application/json"

namespace ssicloud {
enum QQMusicObjectName
{
    OBJECT_NAME_TripDashboard,
    OBJECT_NAME_EnergyAnalysis,
    OBJECT_NAME_BehaviorScore,      // 驾驶行为-分数
    OBJECT_NAME_BehaviourSummary,   // 驾驶行为-总览
    OBJECT_NAME_BehaviourClassifySummary,//驾驶行为-分类统计查询

    OBJECT_NAME_ApptripReport,   // 行程分析-行程统计
    OBJECT_NAME_LocationTravel,  // 行程分析-按时间查询
    OBJECT_NAME_ApptripDistribution, // 行程分析-油门踏板分布
    OBJECT_NAME_ApptripDistributionRpm,  // 行程分析-转速分布
    OBJECT_NAME_ApptripDistributionSpeed,  // 行程分析-速度分布

    OBJECT_NAME_TreasureType,   // 用车宝典-获取宝典类型
    OBJECT_NAME_TreasureCar,    // 用车宝典-分页查询

    OBJECT_NAME_ClassicTypePage,    // 案例分析-获取案例类型
    OBJECT_NAME_ClassicCasePage,    // 案例分析-分页查询

    OBJECT_NAME_OilAnalysisRefuel, // 加油记录

    OBJECT_NAME_VSMaintain,         // 保养-获取保养配置
    OBJECT_NAME_VSMaintainSet,      // 保养-设置保养配置
    OBJECT_NAME_VSMaintainGetRemind,      // 保养-获取保养提醒
    OBJECT_NAME_VSMaintainRecordAdd,      // 保养-保养登记
    OBJECT_NAME_VSMaintainRecordPage,          // 保养-分页查询保养登记

    OBJECT_NAME_VSEventTrack,
    OBJECT_NAME_VSFeedback,

    OBJECT_NAME_SurveySelectQuery,  // 问卷调查 - 分页查询
    OBJECT_NAME_SurveySelectDetail, // 问卷调查 - 详情
    OBJECT_NAME_SurveySubmit, // 问卷调查 - 提交

    OBJECT_NAME_ServicePolicy,      // 服务政策-分页查询

    OBJECT_NAME_NewsTypeList,       // 新闻资讯-获取资讯类型列表
    OBJECT_NAME_NewsSelectPage,    // 新闻资讯-分页查询
};

//
class EmptyInfoNode {
public:
    void clear() {}
};

// 数据总览 数据信息
class TripNode {
public:
    void clear()
    {
        fuels.clear();
        oilFuel.clear();
        gasFuel.clear();
        miles.clear();
        times.clear();
        svgSpeed.clear();
        kmFuels.clear();
    }
    ByteString fuels;   //	String	能耗
    ByteString oilFuel; //	String	油耗
    ByteString gasFuel; //	String	气耗
    ByteString miles;   //	String	里程
    ByteString times;   //	String	运行时长
    ByteString svgSpeed;//  String	平均速度
    ByteString kmFuels; // String	平均能耗

    // 新增，并没有文档介绍，不做解析
//    ByteString avgTrips;
//    ByteString trips;
//    ByteString days;
//    ByteString hours;
//    ByteString avgSpeed;
//    ByteString avgFuels;
//    ByteString electricFuel;
};

// 能耗数据分析，列表项数据
class EmergyLNode {
public:
    void clear() {
        fuels.clear();
        kmFuel.clear();
        day.clear();
        miles.clear();
    }

    ByteString fuels;	// String	能耗
    ByteString miles;	// String	里程
    ByteString kmFuel;	// String	百公里能耗
    ByteString day;     // String	日期
};

// 驾驶行为-分数
class BehaviorScoreNode {
public:
    void clear() {
        chassisNo.clear();
        plateNo.clear();
    }

   double score;        // 分数
   ByteString chassisNo;
   ByteString plateNo;
};
// 驾驶行为统计数据项
class BehaviourLNode {
public:
    void clear() {
        type.clear();
        name.clear();
        cnt.clear();
    }

    ByteString type;
    ByteString name;
    ByteString cnt;
};

// 驾驶行为-分类统计查询
class BehaviourClassifySummaryNode {
public:
    void clear() {
        fuels.clear();
        time.clear();
        num.clear();
        miles.clear();
        oilFuel.clear();
        electricFuel.clear();
        gasFuel.clear();
    }

    ByteString fuels;//    float    总能耗
    ByteString time;//    float    总时长
    ByteString num;//    int    总次数
    ByteString miles;//    float    总里程
    ByteString oilFuel;//    float    总油耗
    ByteString electricFuel;//    float    总电耗
    ByteString gasFuel;//    float    总气耗
};


// -------------------行程分析-----------------------
// 行程分析数据项 - 行程统计
class ApptripNode {
public:
    void clear() {
        avgTrips.clear();
        trips.clear();
        days.clear();
        hours.clear();
        kmFuels.clear();
        fuels.clear();
        miles.clear();
        avgSpeed.clear();
        times.clear();
        avgFuels.clear();
        svgSpeed.clear();
        oilFuel.clear();
        electricFuel.clear();
        gasFuel.clear();
    }

    ByteString avgTrips;
    ByteString trips;
    ByteString days;
    ByteString hours;
    ByteString kmFuels;
    ByteString fuels;
    ByteString miles;
    ByteString avgSpeed;       //	分数
    ByteString times;
    ByteString avgFuels;
    ByteString svgSpeed;
    ByteString oilFuel;
    ByteString electricFuel;
    ByteString gasFuel;
};
// -- 按时间查询
class LocationTravelNode
{
public:
    void clear() {

    }

};
// -- 油门踏板分布
class ApptripDistributionNode
{
public:
    void clear() {
        percents.clear();label.clear();mile.clear();
    }

    ByteString percents; // String     百分比
    ByteString label;    // String     标签
    ByteString mile;     // Double     里程
};
// -- 转速分布
typedef  ApptripDistributionNode ApptripDistributionRpmNode;
typedef  ApptripDistributionNode ApptripDistributionSpeedNode;
//class ApptripDistributionRpm : public ApptripDistributionNode {
//public:
//};
// -------------------end-----------------------

// -------------------用车宝典-----------------------
class TreasureTypeLNode {
public:
    void clear() {
        id.clear(); fileId.clear();name.clear();remark.clear();createDate.clear();
    }

    ByteString id;          //  int    ID
    ByteString fileId;      //  int    图片ID
    ByteString name;        //  String    类型名称
    ByteString remark;      //  String    备注
    ByteString createDate;  //  String    创建时间
};
class TreasureCarLNode {
public:
    void clear() {}
};
// -------------------end-----------------------


// -------------------案例分析-----------------------
class ClassicTypePageLNode {
public:
    void clear() {
        id.clear(); remark.clear();name.clear();
        remark.clear();createTime.clear();updateTime.clear();
    }

    ByteString id;          // int           ID
    ByteString name;        // String        类型名称
    ByteString remark;      // String        备注
    ByteString createTime;  // String        创建时间
    ByteString updateTime;  // String        最后更新时间
};
class ClassicCasePageLNode {
public:
    void clear() {
        content.clear(); fileId.clear(); createTime.clear();
        updateTime.clear(); operatorName.clear(); typeName.clear();
        id.clear(); title.clear();
    }
    ByteString id;
    ByteString content;      // String    内容
    ByteString title;      // String    title
    ByteString fileId;       // String    文件ID
    ByteString createTime;   // String    创建时间
    ByteString updateTime;   // String    更新时间
    ByteString operatorName; // String    创建人
    ByteString typeName;     // String    类型名称
};
// -------------------end-----------------------


// -------------------加油记录-----------------------
class OilAnalysisRefuelLNode {
public:
    void clear() {
        id.clear(); title.clear();vin.clear();
        engineType.clear(); vehicleType.clear();
        chassisNo.clear(); fuelType.clear();
        mainTankLevelDifference.clear(); refuelingSign.clear();
        startTime.clear(); endTime.clear();
        startLongitude.clear(); startLatitude.clear();
        endLongitude.clear(); endLatitude.clear();
        startAddress.clear(); stopAddress.clear();
    }

    ByteString id;      //    int    ID
    ByteString title;   //    String    标题
    ByteString vin;         //    String    VIN
    ByteString engineType;  //    String    发动机类型
    ByteString vehicleType; //    String    车型
    ByteString chassisNo;   //    String    底盘号
    ByteString fuelType;    //    String    燃油类型：1燃油车2新能源车3燃气车
    ByteString mainTankLevelDifference;//    String    油量差值(%)
    ByteString refuelingSign;//    Int    类型：1加油2漏油
    ByteString startTime;   //    Long    开始时间戳
    ByteString endTime;     //    Long    结束时间戳
    ByteString startLongitude;  //    Double    开始经度
    ByteString startLatitude;   //    Double    开始纬度
    ByteString endLongitude;    //    Double    结束经度
    ByteString endLatitude;     //    Double    结束纬度
    ByteString startAddress;    //    String    开始地址
    ByteString stopAddress;     //    String    结束地址
};
// -------------------end-----------------------

// -------------------维保服务信息获取-----------------------
class MaintainNode {
public:
    void clear() {}

    ByteString vin;      // String	VIN
    int additionalMile;	 // Integer	设置里程
    double remainMile;   // Double	距离下次保养里程
    double currentMile;
    double maintainMile;
};
typedef EmptyInfoNode VSMaintainSetNode;
typedef EmptyInfoNode VSMaintainRecordAddNode;

class VSMaintainGetRemindNode {
public:
    void clear() {
        nextChassisMile.clear(); nextEngineMile.clear();
        currentMile.clear(); remainChassisMile.clear();
        remainEngineMile.clear(); lastChassisMile.clear();
        lastEngineMile.clear(); lastChassisDate.clear();
        lastEngineDate.clear();
    }

    ByteString nextChassisMile; //    Double    下次保养里程（底盘）
    ByteString nextEngineMile;  //  Double    下次保养里程（底盘）
    ByteString currentMile;     //  Double    车辆当前里程
    ByteString remainChassisMile;//    Double    距下次保养剩余里程（底盘）
    ByteString remainEngineMile; //   Double    距下次保养剩余里程（发动机）
    ByteString lastChassisMile;  //  Double    上次保养里程（底盘）
    ByteString lastEngineMile;   // Double    上次保养里程（发动机）
    ByteString lastChassisDate;  //  String    上次保养日期（底盘）
    ByteString lastEngineDate;   // String    上次保养日期（发动机）
};

class VSMaintainRecordPageLNode {
public:
    void clear() {
        maintainDate.clear(); actualMile.clear();
        itemType.clear(); createTime.clear();
    }

    ByteString maintainDate;    //    String    保养日期
    ByteString actualMile;      //    Double    保养里程
    ByteString itemType;        //    Integer    保养项：1底盘2发动机
    ByteString createTime;      //    String    录入时间
};
// -------------------end-----------------------


// -------------------问卷调查-----------------------
class SurveySelectQueryLNode {
public:
    void clear() {
        surveyTitle.clear();surveyDes.clear();completed.clear();
        createTime.clear();updateTime.clear();publishTime.clear();
    }

    ByteString surveyTitle; // String        标题
    ByteString surveyDes;   // String        描述
    ByteString completed;   // Boolean        是否已填写
    ByteString createTime;  // String        创建时间
    ByteString updateTime;  // String        更新时间
    ByteString publishTime; // String        发布时间
};

class SurveySelectDetailOptionLNode {
public:
    void clear() {
        optionNo.clear();optionName.clear();choose.clear();
    }

    ByteString optionNo;    //  Int        选项
    ByteString optionName;  //  String     选项内容
    ByteString choose;      //  Boolean    是否选择
};
class SurveySelectDetailLNode {
public:
    void clear()
    {
        id.clear();
        question.clear();
        note.clear();
        must.clear();
        ListTable<SurveySelectDetailOptionLNode>::iterator it;
        // GEN_Printf(LOG_INFO, "----%d----", options.size());
        for (it = options.pop_front();
             it != options.end();
             it = options.pop_front())
        {
            it->clear();
            options.remove(it);
        }
    }
    ByteString id;
    ByteString question; //   String        问题
    ByteString note;     //   Boolean        备注
    ByteString must;     //   Int        是否必填1 是 0 否
    // ByteString options;
    ListTable<SurveySelectDetailOptionLNode> options;
};
// -------------------end-----------------------

// -------------------新闻资讯-----------------------
class NewsTypeListLNode {
public:
    void clear() {
        id.clear(); name.clear();
        updateTime.clear(); remark.clear();
    }

    ByteString id;
    ByteString name;
    ByteString updateTime;
    ByteString remark;
};

class NewsSelectPageLNode {
public:
    void clear() {
        title.clear(); content.clear(); picPath.clear(); isTop.clear();
        topStartTime.clear(); topEndTime.clear(); operatr.clear();
        createTime.clear(); updateTime.clear();
    }

    ByteString title;       // String        标题
    ByteString content;     // String        内容
    ByteString picPath;     // String        缩略图地址
    ByteString isTop;       // int        是否置顶：0否1是
    ByteString topStartTime;// String        置顶开始时间
    ByteString topEndTime;  // String        置顶结束时间
    ByteString operatr;     // String        创建人
    ByteString createTime;  // String        创建时间
    ByteString updateTime;  // String        更新时间
};

typedef EmptyInfoNode SurveySubmitNode;
// -------------------end-----------------------


class ServicePolicyLNode {
public:
    void clear() {
        title.clear();contant.clear(); thumbnail.clear();
        userName.clear();createTime.clear();updateTime.clear();
    }

    ByteString title;     // String        标题
    ByteString contant;   // String        内容
    ByteString thumbnail; // String        缩略图文件ID
    ByteString userName;  // String        创建人
    ByteString createTime;// String        创建时间
    ByteString updateTime;// String        更新时间
};


// 车机埋点
// 车机埋点上传参数
struct EventTrackIn {
    SFString eventId;       // 功能编码	String		是
    SFString eventParam;	// 参数	String		否
    int viewNum;            // 访问次数	Int		是
    int viewSuccessNum;     // 访问成功次数	Int		是
    // 2021-12-13 10:14:00
    SFString uploadTime;    // 时间	String		是

};

// 意见上报输入
// 无效
struct FeedbackIn {
    SFString fname;         //姓名		String		是
    SFString fphone;        //联系电话	String		是
    int type;               //反馈方式	Int		是	1语音2文字
    int feedbackType;       //反馈分类	Int		是
    SFString file;          //语音文件			否	type=1时必传
    SFString content;       //反馈内容	String		否	type=2时必传
    SFString uploadTime;	//上传时间	String		是	2021-12-1310:14:00
};
//
struct FeedbackIn2 {
    SFString name;                  // 姓名     String     是
    SFString phone;                 // 联系电话  String     是
    int feedbackMode;               // 反馈方式  Int     是     1语音2文字
    int feedbackType;               // 反馈分类  Int     是     1:质量反馈 2:服务反馈 3:投诉 4:建议 5:其它
    SFString file;                  // 语音文件  否     feedbackMode =1时必传
    SFString feedbackContent;       // 反馈内容  String     否     feedbackMode =2时必传
    SFString feedbackCreateDate;    // 上传时间  String     是     2021-12-13 10:14:00

};


}


#endif // SSICLOUD_API_COMMON_H

